/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * _VigasApp.java
 *
 * Created on 10/12/2010, 12:24:18
 */
package vigas.gui;

import java.awt.Dimension;
import java.awt.Point;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import vigas.componentes.Apoio;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import vigas.calculos.controller.VigaCalculosController;
import vigas.componentes.CargaAplicada;
import vigas.componentes.CargaDistribuida;
import vigas.componentes.Momento;
import vigas.util.MensagemUtil;

/**
 *
 * @author Lidiany
 */
public class VigasApp extends javax.swing.JFrame {

    private static VigasApp vigasApp;
    //private Calculo calculo;

    /** Creates new form _VigasApp */
    public VigasApp() {
        initComponents();
        initListagemPontos();
        setLocationRelativeTo(null);
        //addMouseListeners();
    }

    public static VigasApp getVigasApp() {
        if (vigasApp == null) {
            vigasApp = new VigasApp();

        }
        return vigasApp;
    }

    private void initListagemPontos() {

        // instância o modelo da tabela;
        modeloListagem = new DefaultTableModel(new String[]{"Tipo", "X", "Y", "Vínculo"}, 0) {

            @Override
            public boolean isCellEditable(int a, int b) {
                return false;
            }
        };

        // cria a tabela;
        listarPontos = new JTable(modeloListagem);
        DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) listarPontos.getDefaultRenderer(JLabel.class);
        renderer.setHorizontalAlignment(SwingConstants.CENTER); // centralizei o JLabel da table
        listarPontos.getColumnModel().getColumn(2).setPreferredWidth(20);
        listarPontos.getColumnModel().getColumn(1).setPreferredWidth(20);
        // evento para clique dentro da tabela;
        listarPontos.addMouseListener(new java.awt.event.MouseAdapter() {

            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jScrollPaneListagemMouseClicked(evt);
            }
        });

        listarPontos.getSelectedRows();

        jScrollPaneListagem.setViewportView(listarPontos);

        jScrollPaneListagem.setAutoscrolls(true);
    } // fim do método initTable();

    public static void inserirTudo(List<Point> p, List<Apoio> a, CargaAplicada carga, CargaDistribuida carga2, Momento momento) {
        modeloListagem.setRowCount(0);
        for (int i = 0; i < p.size(); i++) {

            String dados[] = new String[4];

            dados[0] = "Ponto " + String.valueOf(i + 1);
            dados[1] = String.valueOf(p.get(i).x);
            dados[2] = String.valueOf(p.get(i).y);
            dados[3] = "";

            modeloListagem.addRow(dados);
        }

        for (int i = 0; i < a.size(); i++) {

            String dados[] = new String[4];

            dados[0] = "Apoio " + String.valueOf(i + 1) + ": " + a.get(i).toString();
            dados[1] = String.valueOf(((int) (a.get(i).getPontoMarcadoNaviga().getX())) - 4);
            dados[2] = String.valueOf((int) (a.get(i).getPontoMarcadoNaviga().getY()));
            dados[3] = "";

            modeloListagem.addRow(dados);
        }

        for (int j = 0; j < modeloListagem.getRowCount(); j++) {
            for (int i = j + 1; i < modeloListagem.getRowCount(); i++) {
                if ((int) (Integer.valueOf(modeloListagem.getValueAt(j, 1).toString())) == (int) Integer.valueOf(modeloListagem.getValueAt(i, 1).toString())) {
                    modeloListagem.setValueAt(modeloListagem.getValueAt(j, 0), i, 3);
                    modeloListagem.setValueAt(modeloListagem.getValueAt(i, 0), j, 3);
                }
            }
        }
        if (carga != null) {
            String dados[] = new String[4];

            dados[0] = "Carga Aplicada";
            dados[1] = String.valueOf(carga.getPontoMarcadoNaviga().x);
            dados[2] = String.valueOf(carga.getPontoMarcadoNaviga().y + 2);
            dados[3] = "Viga";

            modeloListagem.addRow(dados);
        }
        if (carga2 != null) {
            String dados[] = new String[4];

            dados[0] = "Carga Distribuída";
            dados[1] = "Xi = " + String.valueOf(carga2.getPontosDaCarga().get(0).x);
            dados[2] = "Xf = " + String.valueOf(carga2.getPontosDaCarga().get(1).x);
            dados[3] = "Viga";

            modeloListagem.addRow(dados);
        }

        if (momento != null) {
            String dados[] = new String[4];

            dados[0] = "Momento";
            dados[1] = String.valueOf(momento.getPontoMarcadoNaviga().x);
            dados[2] = String.valueOf(momento.getPontoMarcadoNaviga().y);
            dados[3] = "Viga";

            modeloListagem.addRow(dados);
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        painelDeDesenho = new PainelDeDesenho(this);
        jPanelControle = new javax.swing.JPanel();
        jPanelGraficos = new JPanel();
        jButtonPonto = new javax.swing.JButton();
        jButtonViga = new javax.swing.JButton();
        jButtonApoioFixo = new javax.swing.JButton();
        jButtonApoioMovel = new javax.swing.JButton();
        jButtonEngaste = new javax.swing.JButton();
        jButtonForcaAplicada = new javax.swing.JButton();
        jButtonForcaDistribuida = new javax.swing.JButton();
        jButtonMomento = new javax.swing.JButton();
        jButtonReiniciar = new javax.swing.JButton();
        jCheckDesenhoLivre = new javax.swing.JCheckBox();
        jButtonCalcular = new javax.swing.JButton();
        jPanelListagem = new javax.swing.JPanel();
        jScrollPaneListagem = new javax.swing.JScrollPane();
        deleteButton = new javax.swing.JButton();
//        jMenuBar1 = new javax.swing.JMenuBar();
//        jMenuArquivo = new javax.swing.JMenu();
//        jMenuItemNovo = new javax.swing.JMenuItem();
//        jMenuItemSair = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        painelDeDesenho.setBackground(new java.awt.Color(255, 255, 255));
        painelDeDesenho.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 2, true));

        javax.swing.GroupLayout painelDeDesenhoLayout = new javax.swing.GroupLayout(painelDeDesenho);
        painelDeDesenho.setLayout(painelDeDesenhoLayout);
        painelDeDesenhoLayout.setHorizontalGroup(
                painelDeDesenhoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 523, Short.MAX_VALUE));
        painelDeDesenhoLayout.setVerticalGroup(
                painelDeDesenhoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 263, Short.MAX_VALUE));

        jPanelControle.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 2, true));

        jButtonPonto.setIcon(new javax.swing.ImageIcon(getClass().getResource("/vigas/gui/img/ponto.png"))); // NOI18N
        jButtonPonto.setToolTipText("Ponto");
        jButtonPonto.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonPontoActionPerformed(evt);
            }
        });

        jButtonViga.setIcon(new javax.swing.ImageIcon(getClass().getResource("/vigas/gui/img/viga.png"))); // NOI18N
        jButtonViga.setToolTipText("Viga");
        jButtonViga.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonVigaActionPerformed(evt);
            }
        });

        jButtonApoioFixo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/vigas/gui/img/fixo.png"))); // NOI18N
        jButtonApoioFixo.setToolTipText("Apoio Fixo");
        jButtonApoioFixo.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonApoioFixoActionPerformed(evt);
            }
        });

        jButtonApoioMovel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/vigas/gui/img/movel.png"))); // NOI18N
        jButtonApoioMovel.setToolTipText("Apoio móvel");
        jButtonApoioMovel.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonApoioMovelActionPerformed(evt);
            }
        });

        jButtonEngaste.setIcon(new javax.swing.ImageIcon(getClass().getResource("/vigas/gui/img/engaste.png"))); // NOI18N
        jButtonEngaste.setToolTipText("Engaste");
        jButtonEngaste.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonEngasteActionPerformed(evt);
            }
        });

        jButtonForcaAplicada.setIcon(new javax.swing.ImageIcon(getClass().getResource("/vigas/gui/img/forcaAplicada.png"))); // NOI18N
        jButtonForcaAplicada.setToolTipText("Força Aplicada");
        jButtonForcaAplicada.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonForcaAplicadaActionPerformed(evt);
            }
        });

        jButtonForcaDistribuida.setIcon(new javax.swing.ImageIcon(getClass().getResource("/vigas/gui/img/forcaDistribuida.png"))); // NOI18N
        jButtonForcaDistribuida.setToolTipText("Força distribuída");
        jButtonForcaDistribuida.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonForcaDistribuidaActionPerformed(evt);
            }
        });

        jButtonMomento.setIcon(new javax.swing.ImageIcon(getClass().getResource("/vigas/gui/img/momento.png"))); // NOI18N
        jButtonMomento.setToolTipText("Momento");
        jButtonMomento.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonMomentoActionPerformed(evt);
            }
        });

        jButtonReiniciar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/vigas/gui/img/refresh.png")));
        jButtonReiniciar.setToolTipText("Reiniciar");
        jButtonReiniciar.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonReiniciarActionPerformed(evt);
            }
        });

        jCheckDesenhoLivre.setText("desenho livre");

       // jButtonCalcular.setIcon(new javax.swing.ImageIcon(getClass().getResource("/vigas/gui/img/chart.png")));
        jButtonCalcular.setText("L");
        jButtonCalcular.setToolTipText("Comprimento");
        jButtonCalcular.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonCalcularActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanelControleLayout = new javax.swing.GroupLayout(jPanelControle);
        jPanelControle.setLayout(jPanelControleLayout);
        jPanelControleLayout.setHorizontalGroup(
                jPanelControleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanelControleLayout.createSequentialGroup().addGap(17, 17, 17).addGroup(jPanelControleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelControleLayout.createSequentialGroup().addComponent(jCheckDesenhoLivre).addGap(18, 18, 18).addComponent(jButtonCalcular).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 57, Short.MAX_VALUE).addComponent(jButtonReiniciar).addContainerGap()).addGroup(jPanelControleLayout.createSequentialGroup().addGroup(jPanelControleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false).addComponent(jButtonForcaAplicada, javax.swing.GroupLayout.PREFERRED_SIZE, 76, Short.MAX_VALUE).addComponent(jButtonPonto, javax.swing.GroupLayout.Alignment.LEADING, 0, 0, Short.MAX_VALUE).addComponent(jButtonApoioFixo, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 30, Short.MAX_VALUE).addGroup(jPanelControleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanelControleLayout.createSequentialGroup().addGroup(jPanelControleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jButtonApoioMovel).addComponent(jButtonForcaDistribuida, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(32, 32, 32).addGroup(jPanelControleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jButtonMomento, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jButtonEngaste))).addComponent(jButtonViga, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(36, 36, 36)))));
        jPanelControleLayout.setVerticalGroup(
                jPanelControleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanelControleLayout.createSequentialGroup().addContainerGap().addGroup(jPanelControleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent(jButtonPonto).addComponent(jButtonViga)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addGroup(jPanelControleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelControleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jButtonApoioMovel).addComponent(jButtonApoioFixo)).addComponent(jButtonEngaste, javax.swing.GroupLayout.Alignment.TRAILING)).addGap(27, 27, 27).addGroup(jPanelControleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanelControleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jButtonForcaAplicada).addComponent(jButtonForcaDistribuida)).addComponent(jButtonMomento)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 62, Short.MAX_VALUE).addGroup(jPanelControleLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jButtonReiniciar).addComponent(jCheckDesenhoLivre).addComponent(jButtonCalcular)).addContainerGap()));

        jPanelListagem.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 2, true));

        jScrollPaneListagem.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0), 0));

        deleteButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/vigas/gui/img/delete-icon.png")));
        deleteButton.setToolTipText("Apagar");
        deleteButton.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                deleteButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanelListagemLayout = new javax.swing.GroupLayout(jPanelListagem);
        jPanelListagem.setLayout(jPanelListagemLayout);
        jPanelListagemLayout.setHorizontalGroup(jPanelListagemLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelListagemLayout.createSequentialGroup().addContainerGap(154, Short.MAX_VALUE).
                addComponent(deleteButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap()).
                addComponent(jScrollPaneListagem, javax.swing.GroupLayout.DEFAULT_SIZE, 329, Short.MAX_VALUE));
        jPanelListagemLayout.setVerticalGroup(jPanelListagemLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelListagemLayout.createSequentialGroup().
                addComponent(jScrollPaneListagem, javax.swing.GroupLayout.DEFAULT_SIZE, 248, Short.MAX_VALUE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(jPanelListagemLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).
                addComponent(deleteButton, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)).addContainerGap()));

//        jMenuArquivo.setText("Arquivo");
//
//        jMenuItemNovo.setText("Novo");
//        jMenuArquivo.add(jMenuItemNovo);
//
//        jMenuItemSair.setText("Sair");
//        jMenuArquivo.add(jMenuItemSair);
//
//        jMenuBar1.add(jMenuArquivo);
//
//        //setJMenuBar(jMenuBar1);

        jPanelGraficos.setBackground(new java.awt.Color(255, 255, 255));
        jPanelGraficos.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 2, true));

        javax.swing.GroupLayout jPanelGraficosLayout = new javax.swing.GroupLayout(jPanelGraficos);
        jPanelGraficos.setLayout(jPanelGraficosLayout);
        jPanelGraficosLayout.setHorizontalGroup(
                jPanelGraficosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 523, Short.MAX_VALUE));
        jPanelGraficosLayout.setVerticalGroup(
                jPanelGraficosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 298, Short.MAX_VALUE));


        getContentPane().setLayout(layout);
        organizarGraficos();

        pack();
    }

    private void organizarGraficos() {
        if (graficoEsforco == null && graficoMomento == null) {
            layout.setHorizontalGroup(
                    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                    layout.createSequentialGroup().addContainerGap().addGroup(
                    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false).addComponent(painelDeDesenho, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jPanelControle, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(jPanelListagem, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addContainerGap()));
            layout.setVerticalGroup(
                    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(
                    javax.swing.GroupLayout.Alignment.LEADING, false).addComponent(jPanelControle, javax.swing.GroupLayout.DEFAULT_SIZE,
                    javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(painelDeDesenho, javax.swing.GroupLayout.DEFAULT_SIZE,
                    javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jPanelListagem, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))));
        } else {

            layout.setHorizontalGroup(
                    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(graficoMomento, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(graficoEsforco, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(painelDeDesenho, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jPanelControle, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(jPanelListagem, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addContainerGap()));
            layout.setVerticalGroup(
                    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(painelDeDesenho, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(jPanelControle, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jPanelListagem, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addComponent(graficoMomento, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(graficoEsforco, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))).addContainerGap()));

        }
    }

    private void jButtonPontoActionPerformed(java.awt.event.ActionEvent evt) {

        painelDeDesenho.setPodeDesenharPonto(true);
        if (this.jCheckDesenhoLivre.isSelected()) {
            painelDeDesenho.setDesenhoLivre(true);
        }
    }

    private void jButtonVigaActionPerformed(java.awt.event.ActionEvent evt) {
        painelDeDesenho.setPodeDesenharViga(true);
    }

    private void jButtonApoioFixoActionPerformed(java.awt.event.ActionEvent evt) {
        painelDeDesenho.setPodeDesenharApoioFixo(true);
    }

    private void jButtonApoioMovelActionPerformed(java.awt.event.ActionEvent evt) {
        painelDeDesenho.setPodeDesenharApoioMovel(true);
    }

    private void jButtonEngasteActionPerformed(java.awt.event.ActionEvent evt) {
        painelDeDesenho.setPodeDesenharEngaste(true);
    }

    private void jButtonForcaAplicadaActionPerformed(java.awt.event.ActionEvent evt) {
        String forca = MensagemUtil.exibirEntradaDeDados(this, "Informe o valor da força em kN");
        try {
            float f = Float.parseFloat(forca);
            painelDeDesenho.setValorDaForca(f);
            painelDeDesenho.setPodeDesenharForcaAplicada(true);
        } catch (NumberFormatException nf) {
        } catch (NullPointerException np) {
        }


    }

    private void jButtonCalcularActionPerformed(java.awt.event.ActionEvent evt) {
        painelDeDesenho.setPodeMostrarComprimento(true);
    }

    public void fazOsCalculos(){
        if (graficoEsforco != null && graficoMomento != null) {
            graficoEsforco.setVisible(false);
            graficoMomento.setVisible(false);
            graficoEsforco = null;
            graficoMomento = null;
        }
        //calculo = new Calculo();
        //calculo.efetuar(painelDeDesenho);
        try {

            VigaCalculosController.resetaController();
            vigaC = VigaCalculosController.getInstance(painelDeDesenho);
            vigaC.adicionarCarga();
            desenharGraficoMomentoFletor();
            desenharGraficoEsforcosCortantes();
            organizarGraficos();
        } catch (Exception e) {
        }
    }

    private void jButtonForcaDistribuidaActionPerformed(java.awt.event.ActionEvent evt) {
        String forca = MensagemUtil.exibirEntradaDeDados(this, "Informe o valor da força em kN/m");
        try {
            float f = Float.parseFloat(forca);
            painelDeDesenho.setValorDaForca(f);
            painelDeDesenho.setPodeDesenharForcaDistribuida(true);

        } catch (NumberFormatException nf) {
        } catch (NullPointerException np) {
        }

    }

    private void jButtonMomentoActionPerformed(java.awt.event.ActionEvent evt) {
        String forca = MensagemUtil.exibirEntradaDeDados(this, "Informe o valor do Momento");
        try {
            float f = Float.parseFloat(forca);
            painelDeDesenho.setValorDaForca(f);
            painelDeDesenho.setPodeDesenharMomento(true);

        } catch (NumberFormatException nf) {
        } catch (NullPointerException np) {
        }


    }

    private void jButtonReiniciarActionPerformed(java.awt.event.ActionEvent evt) {

        modeloListagem.setRowCount(0);
        painelDeDesenho.setVisible(false);
        painelDeDesenho = null;
        jPanelControle.setVisible(false);
        jPanelListagem.setVisible(false);
        jPanelControle = null;
        jPanelListagem = null;

        if (graficoEsforco != null && graficoMomento != null) {
            graficoEsforco.setVisible(false);
            graficoMomento.setVisible(false);
            graficoEsforco = null;
            graficoMomento = null;
            //vigaC.reinicializarVetores();
            VigaCalculosController.resetaController();
        }
        initComponents();
        initListagemPontos();
    }

    private void desenharGraficoMomentoFletor() {

        XYSeriesCollection xy = new XYSeriesCollection();
        XYSeries xyseries = new XYSeries("kN.m");


        for (int i = 0; i < vigaC.mSum.length; i++) {
            xyseries.add(vigaC.xi[i], vigaC.mSum[i]);
          //  xyseries.add(vigaC.xi[i], 0);
        }
        xy.addSeries(xyseries);

        JFreeChart chart = ChartFactory.createXYAreaChart(
                "Momento fletor", null, null, xy,
                PlotOrientation.VERTICAL, true, true, false);

        XYPlot plot = (XYPlot) chart.getPlot();
        //  plot.setDomainZeroBaselineVisible(true);
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        NumberFormat format = new DecimalFormat("##.####");
        rangeAxis.setNumberFormatOverride(format);

        graficoMomento = new ChartPanel(chart, false);
        graficoMomento.setMouseZoomable(true, false);
        graficoMomento.setPreferredSize(new Dimension(524, 149));
        setPropriedadesGraficoMomento();

    }

    private void desenharGraficoEsforcosCortantes() {


        XYSeriesCollection xy = new XYSeriesCollection();

        XYSeries xyseries = new XYSeries("kN");
        for (int i = 0; i < vigaC.vSum.length; i++) {
            xyseries.add(vigaC.xi[i], vigaC.vSum[i]);
           // xyseries.add(vigaC.xi[i], 0);
        }

        xy.addSeries(xyseries);

        JFreeChart chart = ChartFactory.createXYAreaChart(
                "Esforços cortantes", null, null, xy,
                PlotOrientation.VERTICAL, true, true, false);

        XYPlot plot = (XYPlot) chart.getPlot();
        // plot.setDomainZeroBaselineVisible(true);
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
       // rangeAxis.setMarkerBand(null);
        NumberFormat format = new DecimalFormat("##.####");
        rangeAxis.setNumberFormatOverride(format);

        graficoEsforco = new ChartPanel(chart, false);
        graficoEsforco.setMouseZoomable(true, false);
        graficoEsforco.setPreferredSize(new Dimension(524, 149));
        setPropriedadesGraficoEsforco();
    }

    private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {
        int posicao;
        for (int i = 0; i < listarPontos.getSelectedRowCount(); i++) {
            //Deletar Pontos do Painel de Listagem
            if (modeloListagem.getValueAt(listarPontos.getSelectedRows()[i], 0).toString().charAt(0) == 'P') {
                posicao = Integer.valueOf(String.valueOf(modeloListagem.getValueAt(listarPontos.getSelectedRows()[i], 0).toString().charAt(6))) - 1;
                if (modeloListagem.getValueAt(listarPontos.getSelectedRows()[i], 3).toString().length() == 0) {
                painelDeDesenho.deletarPonto(posicao);
                inserirTudo(painelDeDesenho.getPontos(), painelDeDesenho.getApoios(), painelDeDesenho.getCargaAplicada(), painelDeDesenho.getCargaDistribuida(), painelDeDesenho.getMomento());
                fazOsCalculos();
                } else {
                    MensagemUtil.exibirMensagemDeErro("Não é possível apagar um ponto que referencia um apoio! Tente apagar o apoio primeiro.", this);
                }
            }
            //Deletar Apoios do Painel de Listagem
            if (modeloListagem.getValueAt(listarPontos.getSelectedRows()[i], 0).toString().charAt(0) == 'A') {
                posicao = Integer.valueOf(String.valueOf(modeloListagem.getValueAt(listarPontos.getSelectedRows()[i], 0).toString().charAt(6))) - 1;
                painelDeDesenho.deletarApoio(posicao);
                inserirTudo(painelDeDesenho.getPontos(), painelDeDesenho.getApoios(), painelDeDesenho.getCargaAplicada(), painelDeDesenho.getCargaDistribuida(), painelDeDesenho.getMomento());
                fazOsCalculos();
            }
            //Deletar Momento do Painel de Listagem
            if ((listarPontos.getSelectedRowCount() > 0) && modeloListagem.getValueAt(listarPontos.getSelectedRows()[i], 0).toString().charAt(0) == 'M') {
                painelDeDesenho.setMomento(null);
                inserirTudo(painelDeDesenho.getPontos(), painelDeDesenho.getApoios(), painelDeDesenho.getCargaAplicada(), painelDeDesenho.getCargaDistribuida(), painelDeDesenho.getMomento());
                fazOsCalculos();
            }
            //Deletar CargaAplicada do Painel de Listagem
            if ((listarPontos.getSelectedRowCount() > 0) && modeloListagem.getValueAt(listarPontos.getSelectedRows()[i], 0).toString().charAt(6) == 'A') {
                painelDeDesenho.setCargaAplicada(null);
                inserirTudo(painelDeDesenho.getPontos(), painelDeDesenho.getApoios(), painelDeDesenho.getCargaAplicada(), painelDeDesenho.getCargaDistribuida(), painelDeDesenho.getMomento());
                fazOsCalculos();
            }
            //Deletar CargaDistribuida do Painel de Listagem
            if ((listarPontos.getSelectedRowCount() > 0) && modeloListagem.getValueAt(listarPontos.getSelectedRows()[i], 0).toString().charAt(6) == 'D') {
                painelDeDesenho.setCargaDistribuida(null);

                inserirTudo(painelDeDesenho.getPontos(), painelDeDesenho.getApoios(), painelDeDesenho.getCargaAplicada(), painelDeDesenho.getCargaDistribuida(), painelDeDesenho.getMomento());
                fazOsCalculos();
            }            
        }
        painelDeDesenho.repaint();
    }

    private void focusButtonActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    }

    private void jScrollPaneListagemMouseClicked(java.awt.event.MouseEvent evt) {
        for (int i = 0; i < listarPontos.getSelectedRowCount(); i++) {
            if (modeloListagem.getValueAt(listarPontos.getSelectedRows()[i], 0).toString().charAt(0) == 'P') {
                int posicao = Integer.valueOf(String.valueOf(modeloListagem.getValueAt(listarPontos.getSelectedRows()[i], 0).toString().charAt(6))) - 1;
                painelDeDesenho.setPontosSelecionados(painelDeDesenho.getPontos().get(posicao));
            }
            if (modeloListagem.getValueAt(listarPontos.getSelectedRows()[i], 0).toString().charAt(0) == 'A') {
                int posicao = Integer.valueOf(String.valueOf(modeloListagem.getValueAt(listarPontos.getSelectedRows()[i], 0).toString().charAt(6))) - 1;
                painelDeDesenho.setApoiosSelecionados(painelDeDesenho.getApoios().get(posicao));
            }
            else {
                //nada
            }
        }
        painelDeDesenho.setPintaObjetosSelecionados(true);
        painelDeDesenho.repaint();
    }

    private void setPropriedadesGraficoEsforco() {
        graficoEsforco.setBackground(new java.awt.Color(255, 255, 255));
        //graficoEsforco.setHorizontalAxisTrace(true);
        //graficoEsforco.setVerticalAxisTrace(true);
        //graficoEsforco.setMaximumDrawHeight(WIDTH)
        graficoEsforco.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 2, true));
        graficoEsforco.setToolTipText("Gráfico dos esforços cortantes");

        javax.swing.GroupLayout graficoEsforcoLayout = new javax.swing.GroupLayout(graficoEsforco);
        graficoEsforco.setLayout(graficoEsforcoLayout);
        graficoEsforcoLayout.setHorizontalGroup(
                graficoEsforcoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 520, Short.MAX_VALUE));
        graficoEsforcoLayout.setVerticalGroup(
                graficoEsforcoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 144, Short.MAX_VALUE));
    }

    private void setPropriedadesGraficoMomento() {
        graficoMomento.setBackground(new java.awt.Color(255, 255, 255));
        graficoMomento.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 2, true));
        graficoMomento.setToolTipText("Gráfico do momento fletor\n");

        javax.swing.GroupLayout graficoMomentoLayout = new javax.swing.GroupLayout(graficoMomento);
        graficoMomento.setLayout(graficoMomentoLayout);
        graficoMomentoLayout.setHorizontalGroup(
                graficoMomentoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 520, Short.MAX_VALUE));
        graficoMomentoLayout.setVerticalGroup(
                graficoMomentoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 144, Short.MAX_VALUE));
    }
    // Variables declaration - do not modify
    private javax.swing.JButton deleteButton;
    private javax.swing.JButton jButtonApoioFixo;
    private javax.swing.JButton jButtonApoioMovel;
    private javax.swing.JButton jButtonCalcular;
    private javax.swing.JButton jButtonEngaste;
    private javax.swing.JButton jButtonForcaAplicada;
    private javax.swing.JButton jButtonForcaDistribuida;
    private javax.swing.JButton jButtonMomento;
    private javax.swing.JButton jButtonPonto;
    private javax.swing.JButton jButtonReiniciar;
    private javax.swing.JButton jButtonViga;
    private javax.swing.JCheckBox jCheckDesenhoLivre;
//    private javax.swing.JMenu jMenuArquivo;
//    private javax.swing.JMenuBar jMenuBar1;
//    private javax.swing.JMenuItem jMenuItemNovo;
//    private javax.swing.JMenuItem jMenuItemSair;
    private javax.swing.JPanel jPanelControle;
    private javax.swing.JPanel jPanelListagem;
    private javax.swing.JScrollPane jScrollPaneListagem;
    private PainelDeDesenho painelDeDesenho;
    public VigaCalculosController vigaC;
    private static DefaultTableModel modeloListagem;
    private JTable listarPontos;
    private JPanel jPanelGraficos;
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    private ChartPanel graficoEsforco;
    private ChartPanel graficoMomento;
}